﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BusinessLayer.Interfaces;
using BusinessLayer.Implementacion;
using EntityLayer;
using System.Collections;

namespace proyGestionVisitas.Gestion
{
    public partial class wfrmContactoActualizar : System.Web.UI.Page
    {
        private IFacadeContactoActualizar FacadeContactoActualizar;
        private List<T_Cliente> listaCliente;
        private List<T_Contacto> listaContacto;
        private T_Contacto objContacto;
        private String msg = String.Empty;

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (Session["usu"] == null) { Response.Redirect("~/Account/Login.aspx"); return; }
                if (!IsPostBack)
                {
                    if (Request.QueryString["id_cc"] == null) { Retornar(); return; }
                    if (Request.QueryString["id_cc"].ToString() == "1") MostrarDatos();
                    else if (Request.QueryString["id_cc"].ToString() == "2") MostrarDatos();
                    else if (Request.QueryString["id_cc"].ToString() == "3") MostrarDatos();
                    else if (Request.QueryString["id_cc"].ToString() == "4") MostrarDatos();
                    else if (Request.QueryString["id_cc"].ToString() == "5") MostrarDatos();
                    else Retornar();
                }

            }
            catch (Exception ex)
            {
                MostrarComentario(ex, "Page_Load");
            }
        }

        private void Retornar(int? id_cc = null)
        {
            try
            {
                String ruta;
                Int64? nu_ruc, int64_vacio = null;
                int? id, co_servicio, co_producto, co_presupuesto, int_vacio = null;
                id = (Session["id"] != null) ? Convert.ToInt32(Session["id"].ToString()) : int_vacio;
                if (id_cc != null) id = id_cc;
                nu_ruc = (Session["nr"] != null) ? Convert.ToInt64(Session["nr"].ToString()) : int64_vacio;
                co_servicio = (Session["cs"] != null) ? Convert.ToInt32(Session["cs"].ToString()) : int_vacio;
                co_producto = (Session["cp"] != null) ? Convert.ToInt32(Session["cp"].ToString()) : int_vacio;
                co_presupuesto = (Session["cps"] != null) ? Convert.ToInt32(Session["cps"].ToString()) : int_vacio;
                ruta = String.Format("~/Gestion/wfrmInformacionClientesVisitarActualizar.aspx?id={0}&nr={1}&cs={2}&cp={3}&cps={4}", id, nu_ruc, co_servicio, co_producto, co_presupuesto);
                Response.Redirect(ruta, false);
                return;
            }
            catch (Exception ex)
            {
                MostrarComentario(ex, "Retornar");
            }
        }

        private void MostrarDatos()
        {
            try
            {
                String id;
                int? co_contacto, int_vacio = null;
                Int64? nu_ruc, int64_vacio = null;

                nu_ruc = (Request.QueryString["nr"] != null) ? Convert.ToInt64(Request.QueryString["nr"].ToString()) : int64_vacio;
                id = (Request.QueryString["id_cc"] != null) ? Request.QueryString["id_cc"].ToString() : String.Empty;
                if (id == "4" || id == "5")
                {
                    int? co_cont_opor, co_oportunidad;
                    co_cont_opor = (Request.QueryString["cco"] != null) ? Convert.ToInt32(Request.QueryString["cco"].ToString()) : int_vacio;
                    co_oportunidad = (Request.QueryString["co"] != null) ? Convert.ToInt32(Request.QueryString["co"].ToString()) : int_vacio;
                    co_contacto = (Request.QueryString["cc"] != null) ? Convert.ToInt32(Request.QueryString["cc"].ToString()) : int_vacio;
                    Session["id_cc"] = id;
                    Session["nr"] = nu_ruc;
                    Session["cc"] = co_contacto;
                    Session["cco"] = co_cont_opor;
                    Session["co"] = co_oportunidad;
                    Retornar(Convert.ToInt32(id));
                    return;
                }

                FacadeContactoActualizar = new FacadeContactoActualizar();

                listaCliente = new List<T_Cliente>();

                listaCliente = FacadeContactoActualizar.ListarCliente(nu_ruc);
                if (listaCliente == null || listaCliente.Count() == 0) { Session["ok"] = false; Session["msg"] = "No existen Datos para el Cliente."; Retornar(); return; }

                String no_segmento, no_razon_social;
                no_segmento = listaCliente[0].no_sector_economico;
                no_razon_social = listaCliente[0].no_razon_social;


                txtCodigoCliente.Text = nu_ruc.ToString();
                txtSegmento.Text = no_segmento;
                txtRazonSocial.Text = no_razon_social;

                Session["id_cc"] = id;
                Session["nr"] = nu_ruc;

                if (id == "2")
                {
                    co_contacto = (Request.QueryString["cc"] != null) ? Convert.ToInt32(Request.QueryString["cc"].ToString()) : int_vacio;

                    listaContacto = new List<T_Contacto>();

                    listaContacto = FacadeContactoActualizar.ListarContacto(co_contacto);

                    if (listaContacto == null || listaContacto.Count() == 0) { Session["ok"] = false; Session["msg"] = "No existen Datos para el Contacto."; Retornar(); return; }

                    String no_contacto, no_departamento, no_cargo, nu_movil, nu_fijo, nu_anexo, no_email;
                    no_contacto = listaContacto[0].no_contacto;
                    no_departamento = listaContacto[0].no_sector;
                    no_cargo = listaContacto[0].no_cargo;
                    nu_movil = listaContacto[0].nu_telef_cel;
                    nu_fijo = listaContacto[0].nu_telef_fijo;
                    nu_anexo = listaContacto[0].nu_telf_fijo_anexo;
                    no_email = listaContacto[0].no_email;

                    txtPersonaContacto.Text = no_contacto;
                    txtDepartamento.Text = no_departamento;
                    txtCargo.Text = no_cargo;
                    txtMovil.Text = nu_movil;
                    txtFijo.Text = nu_fijo;
                    txtAnexo.Text = nu_anexo;
                    txtEmail.Text = no_email;
                    Session["cc"] = co_contacto;
                }
            }
            catch (Exception ex)
            {
                MostrarComentario(ex, "MostrarDatos");
            }
        }

        private void MostrarComentario(String msg, String titulo = "Mensaje")
        {
            CargarComentario(msg, titulo);
        }

        private void MostrarComentario(Exception ex, String titulo)
        {
            if (ex != null) { msg = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message; }
            CargarComentario(msg, titulo);
        }

        private void CargarComentario(String msg, String titulo)
        {
            lblmenOK.Text = msg;
            pcMensaje.HeaderText = titulo;
            pcMensaje.ShowOnPageLoad = true;
        }

        protected void btnLimpiar_Click(object sender, EventArgs e)
        {
            Limpiar();
        }

        private void Limpiar()
        {
            try
            {
                txtPersonaContacto.Text = String.Empty;
                txtDepartamento.Text = String.Empty;
                txtCargo.Text = String.Empty;
                txtMovil.Text = String.Empty;
                txtFijo.Text = String.Empty;
                txtAnexo.Text = String.Empty;
                txtEmail.Text = String.Empty;
            }
            catch (Exception ex)
            {
                MostrarComentario(ex, "Limpiar");
            }
        }

        protected void btnRegresar_Click(object sender, EventArgs e)
        {
            Retornar();
        }

        protected void btnGrabar_Click(object sender, EventArgs e)
        {
            if (!ValidarCampos()) return;
            GrabarContacto();
        }

        private Boolean ValidarCampos()
        {
            Boolean ok = true;
            String msg = String.Empty;
            try
            {
                if (txtPersonaContacto.Text == String.Empty)
                {
                    ok = false;
                    msg = "Debe ingresar una nombre para la Persona de Contacto.";
                }
            }
            catch (Exception ex)
            {
                ok = false;
                MostrarComentario(ex, "ValidarCampos");
            }
            if (!ok && msg != String.Empty) MostrarComentario(msg);

            return ok;
        }

        private void GrabarContacto()
        {
            Boolean ok = true;
            try
            {
                int? id, co_contacto = null, int_vacio = null;
                id = (Session["id_cc"] != null) ? Convert.ToInt32(Session["id_cc"].ToString()) : int_vacio;

                listaContacto = new List<T_Contacto>();
                FacadeContactoActualizar = new FacadeContactoActualizar();
                objContacto = new T_Contacto();

                if (id == 2)
                {
                    co_contacto = (Session["cc"] != null) ? Convert.ToInt32(Session["cc"].ToString()) : int_vacio;
                    if (co_contacto == null) { MostrarComentario("No existe el contacto."); return; }
                    listaContacto = FacadeContactoActualizar.ListarContacto(co_contacto);
                    if (listaContacto == null || listaContacto.Count() == 0) { MostrarComentario("No existe el contacto."); return; }
                    objContacto.co_contacto = listaContacto[0].co_contacto;
                    objContacto.no_contacto = listaContacto[0].no_contacto;
                    objContacto.no_apellidos = listaContacto[0].no_apellidos;
                    objContacto.no_cargo = listaContacto[0].no_cargo;
                    objContacto.no_email = listaContacto[0].no_email;
                    objContacto.no_permiso = listaContacto[0].no_permiso;
                    objContacto.no_sector = listaContacto[0].no_sector;
                    objContacto.nu_ruc_cliente = listaContacto[0].nu_ruc_cliente;
                    objContacto.nu_telef_cel = listaContacto[0].nu_telef_cel;
                    objContacto.nu_telef_fijo = listaContacto[0].nu_telef_fijo;
                    objContacto.nu_telf_fijo_anexo = listaContacto[0].nu_telf_fijo_anexo;
                    objContacto.nu_tipo_documento = listaContacto[0].nu_tipo_documento;
                }

                Int64? nu_ruc_cliente;
                String no_contacto, no_departamento, no_cargo, no_movil, no_fijo, no_anexo, no_email;
                no_contacto = txtPersonaContacto.Text.Trim();
                no_departamento = txtDepartamento.Text.Trim();
                no_cargo = txtCargo.Text.Trim();
                no_movil = txtMovil.Text.Trim();
                no_fijo = txtFijo.Text.Trim();
                no_anexo = txtAnexo.Text.Trim();
                no_email = txtEmail.Text.Trim();
                nu_ruc_cliente = Convert.ToInt64(Session["nr"].ToString());
                if (id == 1)
                {
                    co_contacto = FacadeContactoActualizar.ObtenerUltimoIDContacto();
                    objContacto.co_contacto = (int)co_contacto;
                }
                else if (id == 2)
                {
                    objContacto.co_contacto = Convert.ToInt32(co_contacto);
                }
                objContacto.no_contacto = no_contacto;
                objContacto.no_sector = no_departamento;
                objContacto.no_cargo = no_cargo;
                objContacto.nu_telef_cel = no_movil;
                objContacto.nu_telef_fijo = no_fijo;
                objContacto.nu_telf_fijo_anexo = no_anexo;
                objContacto.no_email = no_email;
                objContacto.nu_ruc_cliente = nu_ruc_cliente;

                if (id == 1)
                {
                    ok = FacadeContactoActualizar.InsertarContacto(objContacto);
                    if (ok) msg = "Registro de Contacto Exitosa.";
                    else msg = "Error al Registrar el Contacto.";
                }
                else if (id == 2)
                {
                    ok = FacadeContactoActualizar.ModificarContacto(objContacto);
                    if (ok) msg = "Modificación de Contacto Exitosa.";
                    else msg = "Error al Modificar el Contacto.";
                }
            }
            catch (Exception ex)
            {
                ok = false;
                MostrarComentario(ex, "GrabarContacto");
            }
            if (!ok && msg != String.Empty)
            {
                MostrarComentario(msg);
            }
            else if (ok)
            {
                Session["ok"] = ok;
                Session["msg"] = msg;
                Retornar();
            }
        }
    }
}